home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / install-docs < prev    next >
Text File  |  2009-06-08  |  11KB  |  431 lines

  1. #!/usr/bin/perl
  2. # vim:cindent:ts=2:sw=2:et:fdm=marker:cms=\ #\ %s
  3. #
  4. # $Id: install-docs.in 189 2009-04-26 22:57:37Z robert $
  5.  
  6. use warnings;
  7. use strict;
  8.  
  9.  
  10. # declared in Debian::DocBase::InstallDocs;
  11. use vars qw($fully_functional $opt_verbose $opt_debug $opt_update_menus $opt_rootdir $exitval
  12.             $MODE_INSTALL $MODE_REMOVE $MODE_REMOVE_ALL $MODE_INSTALL_ALL
  13.             $MODE_DUMP_DB $MODE_INSTALL_CHANGED
  14.             $MODE_STATUS $MODE_CHECK);
  15.  
  16. my $version='0.9.3';
  17.  
  18. BEGIN {
  19.   if ($ENV{'DPKG_MAINTSCRIPT_PACKAGE'} && $ENV{'DPKG_MAINTSCRIPT_PACKAGE'} ne "doc-base") {
  20.     print STDERR "install-docs called from ".
  21.                   $ENV{'DPKG_MAINTSCRIPT_PACKAGE'} . "'s maintainer script, exiting\n"
  22.       if $ENV{'DOC_BASE_DEBUG'};
  23.     exit 0;
  24.   }
  25.   $fully_functional = eval {
  26.                               require Pod::Usage;
  27.                               import  Pod::Usage qw(pod2usage);
  28.                               require Debian::DocBase::Common;
  29.                               import  Debian::DocBase::Common;
  30.                               require Debian::DocBase::InstallDocs;
  31.                               import  Debian::DocBase::InstallDocs;
  32.                               require Debian::DocBase::Utils;
  33.                               import  Debian::DocBase::Utils;
  34.                               require Debian::DocBase::Gettext;
  35.                               import  Debian::DocBase::Gettext;
  36.                               1;
  37.                         };
  38.   warn $@ if $@;
  39. }
  40.  
  41. =head1 NAME
  42.  
  43. install-docs - manage online Debian documentation
  44.  
  45. =cut
  46.  
  47.  
  48.  
  49. # set umask explicitly
  50. umask 022;
  51.  
  52. # constants
  53. my $do_dwww_update = 1;
  54. my $force_reregister_flagfile = "/var/lib/doc-base/info/FORCE-REREGISTER.flag";
  55.  
  56. =head1 SYNOPSIS
  57.  
  58.  install-docs [options] -i,--install | -r,--remove | -c,--check file [ file ... ]
  59.  
  60.  install-docs [options] -I,--install-all | -C,--install-changed | -R,--remove-all
  61.  
  62.  install-docs [options] -s,--status docid [ docid ... ]
  63.  
  64.  install-docs [options] --dump-db dbname
  65.  
  66.  install-docs -h,--help | -V,--version
  67.  
  68.  
  69. =head1 DESCRIPTION
  70.  
  71. B<install-docs> is a tool allow Debian package maintainers to register
  72. documentation to various documentation systems.  It currently supports
  73. B<dhelp>,  B<dwww>, B<doc-central>, and B<scrollkeeper> browsers.
  74.  
  75. This manual page provides a quick synopsis of B<install-docs> usage.
  76. Full documentation can be found in the documentation, including a
  77. description of the control file syntax and grammar.
  78.  
  79. =head1 OPTIONS
  80.  
  81. =over 4
  82.  
  83. =cut
  84. sub _CheckArgCount($$) {
  85.   my ($cnt, $option) = @_;
  86.   ++$cnt;
  87.  
  88.   if ($option eq "install-all" or$option eq "install-changed" or $option eq "remove-all") {
  89.     die sprintf _g("Too many arguments for `%s'"), $option unless $cnt == 0;
  90.   } 
  91.   elsif ($option eq "dump-db") {
  92.     die sprintf _g("`%s' requires exactly one argument"), $option unless $cnt == 1;
  93.   }
  94.   else {
  95.     die sprintf _g("Arguments missing for %s"), $option if $cnt == 0;
  96.   }    
  97. }
  98.    
  99.  
  100.  sub CheckFunctionality(;$) { # {{{
  101.   my $dont_force_reg = shift;
  102.   if (not $fully_functional) {
  103.     open F, "> $force_reregister_flagfile"
  104.       or die sprintf _g("Cannot create %s: %s\n"), $force_reregister_flagfile, $!;
  105.     print F "x";
  106.     close F;
  107.     exit 0;
  108.   }
  109.   if (!$dont_force_reg && -e $force_reregister_flagfile) {
  110.     Inform( _g("Re-registation of all documents forced by %s"), $force_reregister_flagfile);
  111.     SetMode($MODE_INSTALL_ALL);
  112.     unlink ($force_reregister_flagfile);
  113.     return 1;
  114.   }
  115.   return 0;
  116.  
  117. } # }}}
  118.  
  119.  
  120. #### Parse arguments loop #####
  121. #
  122. exit(1) if not $fully_functional and $#ARGV < 0;
  123. pod2usage(-verbose => 0, -exitval => 1) if $#ARGV < 0 ;
  124. while (my $arg = shift @ARGV) {
  125.  
  126.   # try to handle concatenation of options e.g. `-vdi' instead of `-v -d -i'
  127.   if ($arg =~ /^(-\w)(\w+)$/) {
  128.     $arg = $1;
  129.     unshift(@ARGV, "-".$2)
  130.   }
  131.  
  132.   if (($arg eq '-v') or ($arg eq '--verbose')) { # {{{
  133.  
  134. =item B<-v>, B<--verbose>
  135.  
  136. Operate verbosely.
  137.  
  138. =cut
  139.     $opt_verbose = 1;
  140.      next;  # }}} 
  141.  
  142.    } elsif (($arg eq '-d') or ($arg eq '--debug')) { # {{{
  143.  
  144. =item B<-d>, B<--debug>
  145.  
  146. Print some debugging informations.
  147.  
  148. =cut
  149.     $opt_debug = 1;
  150.     next;  # }}} 
  151.  
  152.    } elsif ($arg eq '--no-update-menus') { # {{{
  153.  
  154. =item B<--no-update-menus>
  155.  
  156. Inhibit running L<dwww-build-menu(8)>, L<dhelp_parse(8)>,
  157. and L<scrollkeeper-update(8)>.
  158.  
  159. =cut
  160.     $opt_update_menus = 0;
  161.     next; # }}} 
  162.  
  163.    } elsif ($arg  eq '--rootdir') { # {{{
  164.  
  165. =item B<--rootdir> I<dir>
  166.  
  167. Set the root directory to I<dir> instead of `I</>'. Useful and valid only with
  168. the B<--check> action.
  169.  
  170. =cut
  171.     _CheckArgCount($#ARGV, "rootdir");
  172.     $arg = shift @ARGV;
  173.     -d $arg or die sprintf _g("`%s' does not exist or is not a directory"), $arg;
  174.     ($opt_rootdir = $arg) =~ s/\/+$//;
  175.     next; # }}}
  176.  
  177.  
  178. =back
  179.  
  180. =head1 ACTIONS
  181.  
  182. Below is list of possible actions B<install-docs> could handle. There can be only one action
  183. option passed to install-docs, moreover the action with its arguments must be the last option
  184. passed.
  185.  
  186. Each I<file> argument should be the full path for the doc-base control file (i.e.
  187. `/usr/share/doc-base/some_file' or `/etc/doc-base/documents/some_file'), and each
  188. I<docid> should be the document identifier
  189. (Document identifiers are set in the `Document' field of the control file, and usually
  190. correspond to the package name.)
  191.  
  192. If I<file> or I<docid> equals `B<->' (the minus sign), the list of
  193. arguments is read from the standard input (each file name or document id in separate line).
  194.  
  195. =over 4
  196.  
  197.  
  198. =cut
  199.  
  200.    } elsif (($arg eq '-i') or ($arg eq '--install')) { # {{{ 
  201.  
  202. =item B<-i> I<file> [I<file> ...],  B<--install> I<file> [I<file> ...]
  203.  
  204. Install the documentation described by the control file I<file>.
  205.  
  206. =cut
  207.     # install new docs
  208.     _CheckArgCount($#ARGV, "install");
  209.     SetMode($MODE_INSTALL, @ARGV) unless CheckFunctionality();
  210.     last; # }}}
  211.  
  212.   } elsif (($arg eq '-r') or ($arg eq '--remove')) { # {{{
  213.  
  214. =item B<-r> I<file> [I<file> ...],  B<--remove> I<file> [I<file> ...]
  215.  
  216. Remove the documentation identified by the control file
  217. I<file>.
  218.  
  219. =cut
  220.     # remove old docs #
  221.     _CheckArgCount($#ARGV, "remove");
  222.     SetMode($MODE_REMOVE, @ARGV) unless CheckFunctionality();
  223.     last; # }}}
  224.  
  225.   } elsif (($arg eq '-c') or ($arg eq '--check')) { # {{{
  226.  
  227. =item B<-c> I<file> [I<file> ...],  B<--check> I<file> [I<file> ...]
  228.  
  229. Check the control file I<file> and display number of possible problems found.
  230. Use with I<--verbose> to get the actual locations of errors and warnings.
  231. If I<--rootdir> was also given, its argument will be prepended to names of the files
  232. given if the `Files' and `Index' fields of the I<file>.
  233.  
  234. =cut
  235.     _CheckArgCount($#ARGV, "check");
  236.     SetMode($MODE_CHECK, @ARGV);
  237.     last; # }}}
  238.  
  239.    } elsif (($arg eq '-R') or ($arg eq '--remove-all')) { # {{{
  240.  
  241. =item B<-R>,  B<--remove-all>
  242.  
  243. De-register all registered documents.
  244.  
  245. =cut
  246.     _CheckArgCount($#ARGV, "remove-all");
  247.     CheckFunctionality(1);
  248.     SetMode($MODE_REMOVE_ALL);
  249.     last; # }}}
  250.  
  251.   } elsif (($arg eq '-I') or ($arg eq '--install-all')) { # {{{
  252.  
  253. =item B<-I>, B<--install-all>
  254.  
  255. (Re)register all documents from F</usr/share/doc-base> and F</etc/doc-base/documents>.
  256.  
  257. =cut
  258.     _CheckArgCount($#ARGV, "install-all");
  259.     CheckFunctionality(1);
  260.     SetMode($MODE_INSTALL_ALL);
  261.     last; # }}}
  262.  
  263.   } elsif (($arg eq '-C') or ($arg eq '--install-changed')) { # {{{
  264.  
  265. =item B<-C>, B<--install-changed>
  266.  
  267. Compare contents of F</usr/share/doc-base> and F</etc/doc-base/documents> directories
  268. with registered documents database and de-register any files that are missing and
  269. (re)register only changed or new files.
  270.  
  271. =cut
  272.     _CheckArgCount($#ARGV, "install-changed");
  273.     SetMode($MODE_INSTALL_CHANGED) unless CheckFunctionality();
  274.     last; # }}}
  275.  
  276.   } elsif (($arg eq '-s') or ($arg eq '--status')) {  # {{{
  277.  
  278. =item B<-s> I<docid> [I<docid> ...], B<--status> I<docid> [I<docid> ...]
  279.  
  280. Display the status of the document identifier I<docid>.
  281.  
  282. =cut
  283.     _CheckArgCount($#ARGV, "status");
  284.     SetMode($MODE_STATUS, @ARGV);
  285.     last; # }}}
  286.  
  287.   } elsif (($arg eq '-L') or ($arg eq '--listfiles')) { # {{{
  288.  
  289. =item B<-L> I<docid> [I<docid> ...], B<--listfiles> I<docid> [I<docid> ...]
  290.  
  291. Deprecated option. Does nothing.
  292.  
  293. =cut
  294.     warn sprintf _g("Ignoring deprecated command line argument: %s\n"), $arg;
  295.     exit 0;
  296.  # }}}
  297.  
  298.   }  elsif ($arg eq '--dump-db') { # {{{
  299.  
  300. =item B<--dump-db> I<dbname>
  301.  
  302. Dumps contents of internal databases, for debugging purposes. I<dbname> can be either B<files.db> or
  303. B<status.db>.
  304.  
  305. =cut
  306.     _CheckArgCount($#ARGV, "dump-db");
  307.     SetMode($MODE_DUMP_DB, @ARGV);
  308.     last # }}}
  309.  
  310.    } elsif (($arg eq '-h') or ($arg eq '--help')) { # {{{
  311.  
  312. =item B<-h>, B<--help>
  313.  
  314. Show a short help message.
  315.  
  316.  
  317. =cut
  318.     pod2usage(-verbose => 1, -exitval => 0);
  319.     # NOT REACHED  # }}}
  320.  
  321.    } elsif (($arg eq '-V') or ($arg eq '--version')) { # {{{
  322.  
  323. =item B<-V>, B<--version>
  324.  
  325. Display version infromation
  326.  
  327. =back
  328.  
  329. =cut
  330.     print "install-docs $version\n";
  331.     exit 0;
  332.     # NOT REACHED  # }}}
  333.  
  334.   } else { # {{{ default: die
  335.     pod2usage(-msg => "Invalid argument: $arg", -verbose => 0, -exitval => 1);
  336.   } # }}}
  337.  
  338. }
  339.  
  340.  
  341.  
  342. #### Main function
  343. InstallDocsMain();
  344.  
  345.  
  346. exit ($exitval);
  347.  
  348. __DATA__
  349.  
  350. =head1 COMPATIBILITY ISSUES
  351.  
  352. The following features were added in version 0.8.4,
  353. please make sure to add proper
  354. `I<Conflicts>' or `I<Depends>' lines if you would like to use them in your package's scripts:
  355.  
  356. =over
  357.  
  358. =item *
  359.  
  360. support for passing more than one argument to the B<-i> and B<-r> actions,
  361.  
  362. =item *
  363.  
  364. reading arguments from the standard input,
  365.  
  366. =item *
  367.  
  368. B<-I>,B<--install-all>, B<-R>, B<---remove-all>, B<-c>, B<--check> actions,
  369.  
  370. =item *
  371.  
  372. B<-d>, B<--debug>, B<-h>, B<--help> options.
  373.  
  374. =back
  375.  
  376.  The B<-C>, B<--install-changed>, B<--dump-db>, B<-V>, B<--version> options were added in 0.8.12.
  377.  
  378. =head1 FILES
  379.  
  380. =over 4
  381.  
  382. =item F</usr/share/doc-base/>
  383.  
  384. The location of doc-base control files provided by various packages.
  385.  
  386. =item F</etc/doc-base/documents/>
  387.  
  388. The location of doc-base control files provided by local administrator.
  389.  
  390. =item F</var/lib/doc-base/info/documents/>
  391.  
  392. The location of registered control files.
  393.  
  394. =item F</var/lib/doc-base/info/status.db>
  395.  
  396. Statuses of registered documents.
  397.  
  398. =item F</var/lib/doc-base/info/files.db>
  399.  
  400. Timestamps and documents ids of registered doc-base files.
  401.  
  402. =item F</var/lib/doc-base/omf/>
  403.  
  404. The location of generated scrollkeeper OMF files.
  405. Note: F</usr/share/omf/doc-base> should be a symbolic link pointing to the directory.
  406.  
  407. =back
  408.  
  409. =head1 BUGS
  410.  
  411. See L<http://bugs.debian.org/doc-base>.
  412.  
  413. =head1 SEE ALSO
  414.  
  415. dhelp(1), doccentral(1), dwww(7), scrollkeeper(7),
  416. Debian doc-base Manual F</usr/share/doc/doc-base/doc-base.html/index.html>
  417.  
  418. =head1 AUTHOR
  419.  
  420. This program was originally written by Christian Schwarz
  421. <schwarz@debian.org>, for the Debian GNU/Linux system, and the
  422. next maintainer was Adam Di Carlo <aph@debian.org>.
  423. Robert Luberda <robert@debian.org> is currently maintaining and extending it.
  424.  
  425. This software was meant to be for the benefit of the entire Debian
  426. user and developer community.  If you are interested in being involved
  427. with this software, please join the mailing list
  428. <debian-doc@lists.debian.org>.
  429.  
  430. =cut
  431.